Http学习笔记——请求方法

名词解释

安全性:客户端可以发起请求,并知道它不会改变资源的状态。
幂等性:保证客户端重复发起某个请求的效果与一次请求的效果一致。

方法名 安全性 幂等性 请求状态 响应状态 用途
GET true true  只有header,没有body 对应请求URI的资源表述,通常带有body。响应header中的Content-Type,Content-Length,Content-Language,Last-Modified,ETag等应该和响应body的表述一致。 通常用于请求服务器发送某个资源。例如获取URI对应的html,文件等。
HEAD true true  只有header,没有body 只有header,没有body。服务器不能添加body。 HEAD 方法与 GET 方法的行为很类似,但服务器在响应中只返回首部。不会返回实体的主体部分。

可以在不获取到实际资源的情况下看看资源状态是否正确。

可以获取资源大小,考虑是否需要进行多线程下载等。

OPTIONS true true  只有header,没有body 默认只有header,但是也可以在body中添加内容,比如描述性文字 使用该方法来获取服务器支持的http 方法,也可以用来ping服务器是否正常。
POST false false  一个资源的表述  一个资源的表述,或是一个重定向指令。如果body中存在表述,则其URI和请求URI不一致,包含一个带有改资源URI的Content-Location头。 POST 方法起初是用来向服务器输入数据的 。实际上,通常会用它来支持 HTML 的表单。让资源在服务器上进行一系列操作并返回结果,如创建,删除,更新等。
PUT false true  一个资源的表述。请求的body可以与客户端后续收到的GET请求一样,当然,也可以不一样。在某些情况下,服务器也可要求客户端只提供资源的可变部分。  更新的状态。可在响应中包含被更新资源的完整表述,但是客户端不能假设响应中包含完整状态,除非响应有一个Content-Location头。如果服务器没有包含这个头,客户端必须提交一个无条件GET请求来获取更新后的表述,带有Last-Modified和/或ETag头。 与 GET 从服务器读取文档相反,PUT 方法会向服务器写入文档。常用于上传文件或替换服务器上的文件。
DElETE false true  只有header,没有body。  成功或失败。body中可以包含操作的状态。 顾名思义,DELETE 方法所做的事情就是请服务器删除请求 URL 所指定的资源。但是,客户端应用程序无法保证删除操作一定会被执行。因为 HTTP 规范允许服务器在不通知客户端的情况下撤销请求。
TRACE  / / header与body。  body中包含整个请求消息。 TRACE 方法主要用于诊断,回显服务器接收到的信息,可比对是否在传输过程中数据是否出现损坏或被修改。支持此方法的服务器可能存在安全漏洞。

各个方法报文示例

GET

[code lang=”SHELL”]
# 请求
GET /hello HTTP/1.1
Host: localhost
# 响应
HTTP/1.1 200 OK
Content-Type: application/xml; charset=UTF-8
Content-Length: 21

<hello>tester</hello>
[/code]

HEAD

[code lang=”SHELL”]
# 请求
GET /hello HTTP/1.1
Host: localhost
# 响应
HTTP/1.1 200 OK
Content-Type: application/xml; charset=UTF-8
Content-Length: 21
[/code]

OPTIONS

[code lang=”SHELL”]
# 测试对应资源所支持的方法
OPTIONS /test-options HTTP/1.1
Host: localhost
# 响应
HTTP/1.1 204 No Content
Allow: GET, POST, OPTIONS

# ping服务器
OPTIONS * HTTP/1.1
Host: localhost
# 响应
HTTP/1.1 204 No Content
[/code]

POST

[code lang=”SHELL”]
# 执行动作的请求
POST /prompt/delete HTTP/1.1
Host: localhost
# 响应
HTTP/1.1 204 No Content

# 创建资源的请求
POST /stu/bob HTTP/1.1
Host: localhost
Content-Type: application/xml

<student>
<name>Bob</name>
<age>22</age>
</student>
# 响应
HTTP/1.1 201 Created
Location: http://localhost/stu/bob
Content-Location: http://localhost/stu/bob
Content-Type: application/xml

<student>
<name>Bob</name>
<age>22</age>
</student>

# 修改资源的请求
POST /stu/bob/modify HTTP/1.1
Host: localhost
Content-Type: application/json

{
"Name": "Bob",
"Age": 24
}
# 响应
HTTP/1.1 303 See Other
Location: http://localhost/stu/bob
Content-Type: application/xml

<student>
<name>Bob</name>
<age>24</age>
</student>
[/code]

PUT

[code lang=”SHELL”]
# 更新资源的请求
PUT /stu/bob HTTP/1.1
Host: localhost
# 响应
HTTP/1.1 204 No Content

# 创建资源的请求
PUT /stu/alice HTTP/1.1
Host: localhost
# 响应
HTTP/1.1 201 Created
Location: http://localhost/stu/alice
Content-Length: 0
[/code]

DELETE
[code lang=”SHELL”]
# 请求
DELETE /doc/old.txt HTTP/1.1
Host: localhost
# 响应
HTTP/1.1 204 No Content
[/code]

TRACE
[code lang=”SHELL”]
# 请求
TRACE /trace HTTP/1.1
Host: localhost
Accept: text/html
# 响应
HTTP/1.1 200 OK
Content-Type: message/http
# 空行
TRACE /trace HTTP/1.1
Host: localhost
Accept: text/html
[/code]

关于方法名扩展
HTTP 被设计成字段可扩展的,这样新的特性就不会使老的软件失效了。扩展方法指的就是没有在 HTTP/1.1 规范中定义的方法。服务器会为它所管理的资源实现一些 HTTP 服务,这些方法为开发者提供了一种扩展这些 HTTP 服务能力的手段。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注